extends Node2D

class_name 投射物

@export var 伤害值:int = 5
@export var 速度:int = 200

var 回调方法: Callable
var 角色: 角色单位
var 目标网格:Vector2i
var 目标世界坐标:Vector2

var 是否已命中目标: bool = false

func set_up(回调方法: Callable, 角色: 角色单位, 目标网格:Vector2i):
	global_position = 角色.投射物出发点.global_position
	self.回调方法 = 回调方法
	self.角色 = 角色
	self.目标网格 = 目标网格
	目标世界坐标 = 网格管理器.获取世界坐标(目标网格)
	look_at(目标世界坐标)

func 造成伤害():
	var 目标角色:角色单位 = 网格管理器.获取占用网格的角色(目标网格)
	if 目标角色 and 目标角色.队伍id!= 角色.队伍id:
		目标角色.受到伤害(伤害值)


func 命中目标():
	# 判断如果有击中特效,就播放
	if $AnimatedSprite2D.sprite_frames.has_animation("hit"):
		$AnimatedSprite2D.play("hit")
	
	$命中后销毁计时器.start()
	造成伤害()
	回调方法.call()
	

func _process(delta: float) -> void:
	if 是否已命中目标:
		return
	global_position = global_position.move_toward(目标世界坐标, 速度*delta)
	if global_position == 目标世界坐标:
		是否已命中目标 = true
		命中目标()


func _on_timer_timeout() -> void:
	print("_on_timer_timeout")
	queue_free()
